// 封装全局管理token类

import 'package:shared_preferences/shared_preferences.dart';

class TokenManager {
  // 1定义 私有属性 存储token
  String? _token;
  // 2.创建常量Key
  final String _key = 'shenling_token';
  // 3.创建全局唯一的单例对象
  static TokenManager? _instance;
  // 4.自定义构造函数，私有化，不允许外部创建实例
  TokenManager._internal();
  // 5.创造工厂 构建函数
  factory TokenManager() {
    _instance ??= TokenManager._internal();
    return _instance!;
  }

  // 6.提供init方法用于从本地获取token
  Future<void> init() async {
    // 创建 SharedPreferences实例
    final SharedPreferences prefs = await SharedPreferences.getInstance();
    // 获取本地存储的token, 如果没有则设置为空字符串
    _token = prefs.getString(_key) ?? '';
  }

  // 7.供saveToken方法用于存储token
  Future<void> saveToken(String token) async {
    // 创建 SharedPreferences实例
    final SharedPreferences prefs = await SharedPreferences.getInstance();
    // 保存token到本地
    await prefs.setString(_key, token);
    // 更新_token的值
    _token = token;
  }

  //提供getToken方法用于同步获取token
  String? getToken() {
    return _token;
  }

  //提供removeToken方法用于删除token
  Future<void> removeToken() async {
    // 创建 SharedPreferences实例
    final SharedPreferences prefs = await SharedPreferences.getInstance();
    // 删除token
    await prefs.remove(_key);
    // 更新_token的值 为null
    _token = null;
  }
}
